package dp;
/**
 * 给两个整数数组 A 和 B ，返回两个数组中公共的、长度最长的子数组的长度。
 *
 * 示例 1:
 *
 * 输入:
 * A: [1,2,3,2,1]
 * B: [3,2,1,4,7]
 * 输出: 3
 * 解释:
 * 长度最长的公共子数组是 [3, 2, 1]。
 * 说明:
 *
 * 1 <= len(A), len(B) <= 1000
 * 0 <= A[i], B[i] < 100
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * */

public class FindLength {

    public int findLength(int[] A, int[] B) {
        if(A == null || B == null || A.length == 0 || B.length == 0){
            return 0;
        }

        int[][] dp = new int[A.length][B.length];
        int max = 0;
        for(int i = 0; i < A.length; i ++){
            for(int j = 0; j < B.length; j ++){
                if(A[i] == B[j]){
                    if(i == 0 || j == 0){
                        dp[i][j] = 1;
                    } else {
                        dp[i][j] = dp[i-1][j-1] + 1;
                    }
                    if(dp[i][j] > max){
                        max = dp[i][j];
                    }
                }
            }
        }
        return max;
    }
}
